package com.ruoyi.common.utils.order;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;

public class OrderNoGenerator {
    private static final String PREFIX = ""; // 订单前缀
    private static final AtomicInteger SEQ = new AtomicInteger(1000); // 序列号
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMddHHmmss");
    /**
     * 方式一：时间戳 + 随机数
     */
    public static String generateOrderNo1() {
        return PREFIX + DATE_FORMAT.format(new Date())
                + String.format("%04d", new Random().nextInt(10000));
    }

    /**
     * 方式二：时间戳 + 原子性自增序列
     */
    public static String generateOrderNo2() {
        return PREFIX + DATE_FORMAT.format(new Date())
                + getNextSeq();
    }

    /**
     * 方式三：UUID方式
     */
    public static String generateOrderNo3() {
        return PREFIX + UUID.randomUUID().toString().substring(0, 8);
    }



    /**
     * 获取序列号
     */
    private static String getNextSeq() {
        int value = SEQ.incrementAndGet();
        if (value > 9999) {
            SEQ.set(1000);
            value = SEQ.get();
        }
        return String.format("%04d", value);
    }
}
